package com.tpe.view.bean;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.tpe.model.entity.Usuario;
import com.tpe.model.service.UsuarioService;

@ViewScoped
@ManagedBean(name = "usuarioBean")
public class UsuarioBean {
	
	private Usuario usuario;

	private List<Usuario> listaUsuarios;
	
	public UsuarioBean() {
		usuario = new Usuario();
		listaUsuarios = new ArrayList<Usuario>();
	}

	@EJB private UsuarioService usuarioService;
	
	public void pesquisar() throws Exception {
		listaUsuarios = (List<Usuario>) usuarioService.pesquisar(getUsuario());
		
		if (listaUsuarios == null || listaUsuarios.isEmpty() || listaUsuarios.size() == 0)
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_WARN, "Nenhum registro encontrado.", null));
	}
	
	public void salvar() throws Exception {
		try {
			verificaEmail();
			verificaDuplicado();

			boolean isUpdate = getUsuario().getId() != null;
			usuarioService.salvar(getUsuario());

			if(isUpdate)
				FacesContext.getCurrentInstance().addMessage(null, 
						new FacesMessage(FacesMessage.SEVERITY_INFO, "Atualização realizada com sucesso.", null));
			else
				FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_INFO, "Gravação realizada com sucesso. Um e-mail de confirmação será enviado em até 12h.", null));

		} catch (Exception e) {
			if(!FacesContext.getCurrentInstance().getMessages().hasNext())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Houve um erro na gravação do Usuário.", null));

			throw new Exception();
		}
	}
	
	public void verificaEmail() throws Exception {
		if(!getUsuario().getEmail().contains("@") && !getUsuario().getEmail().contains(".")){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Favor informar um e-mail válido.", null));
			throw new Exception();
		}
	}
	
	public void verificaDuplicado() throws Exception {
		if(usuarioService.verificaDuplicado(getUsuario())) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Cadastro não pode ser duplicado. O e-mail informado,já consta em nossa base de dados.", null));
			throw new Exception();
		}
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getListaUsuarios() {
		return listaUsuarios;
	}

	public void setListaUsuarios(List<Usuario> listaUsuarios) {
		this.listaUsuarios = listaUsuarios;
	}
}
